package editorsvg.editor.estilo;

import editorsvg.propiedades.GrupoPropiedades;
import editorsvg.propiedades.PropiedadPintura;
import editorsvg.propiedades.PropiedadNumericaReal;
import java.awt.BasicStroke;
import java.awt.Graphics2D;

/**
 *
 * @author Jorge
 */
public class Estilo implements Cloneable {

    private Pintura relleno;
    private Pintura tinta;
    private Double anchoTrazo;
    private GrupoPropiedades propiedadesEstilo;

    public Estilo() {
        tinta = new Pintura(0);
        relleno = new Pintura(0xFF0000);
        anchoTrazo = new Double(1);

        propiedadesEstilo = new GrupoPropiedades("Estilo");
        propiedadesEstilo.agregarPropiedad(new PropiedadPintura(this, "tinta", "stroke"));
        propiedadesEstilo.agregarPropiedad(new PropiedadPintura(this, "relleno", "fill"));
        propiedadesEstilo.agregarPropiedad(new PropiedadNumericaReal(this, "anchoTrazo", "stroke-width"));
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        Estilo clon = (Estilo) super.clone();
        clon.relleno = (Pintura) relleno.clone();
        clon.tinta = (Pintura) tinta.clone();
        clon.propiedadesEstilo = (GrupoPropiedades) propiedadesEstilo.clone();
        clon.propiedadesEstilo.asignarObjeto(this);
        return clon;
    }

    public Pintura getRelleno() {
        return relleno;
    }

    public void setRelleno(Pintura relleno) {
        this.relleno = relleno;
    }

    public Pintura getTinta() {
        return tinta;
    }

    public void setTinta(Pintura tinta) {
        this.tinta = tinta;
    }

    public Double getAnchoTrazo() {
        return anchoTrazo;
    }

    public void setAnchoTrazo(Double anchoTrazo) {
        this.anchoTrazo = anchoTrazo;
    }

    public boolean establecerRelleno(Graphics2D graphics) {
        if (relleno != null && relleno.getPaint() != null) {
            graphics.setPaint(relleno.getPaint());
            return true;
        } else {
            return false;
        }
    }

    public boolean establecerTinta(Graphics2D graphics) {
        if (tinta != null && tinta.getPaint() != null) {
            graphics.setPaint(tinta.getPaint());
            graphics.setStroke(new BasicStroke(anchoTrazo.floatValue()));
            return true;
        } else {
            return false;
        }
    }

    public GrupoPropiedades obtenerPropiedades() {
        return propiedadesEstilo;
    }
}
